/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
import axios from "axios";
import { get_web_url } from "@/utils/config.js";
import { el_message } from "@/utils/el_message";
let web_url = get_web_url(true);
axios.defaults.baseURL = `${web_url.webPath}/api`;
axios.defaults.timeout = 1000000;
axios.defaults.withCredentials = true;

//请求拦截
axios.interceptors.request.use(
  async (config) => {
    // 每次发送请求之前判断vuex中是否存在token
    // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    // config.headers.token = sessionStorage.getItem('token')
    return config;
  },
  (error) => {
    return Promise.error(error);
  }
);
// 响应拦截器
axios.interceptors.response.use(
  (response) => {
    if (response.status === 200) {
      if (response.data.msg && response.data.is_show) {
        switch (response.data.code) {
          case 200:
            el_message(response.data.msg, "success");
            break;
          case 204:
            el_message(response.data.msg, "warning");
            break;
          case 500:
            el_message(response.data.msg, "error");
            break;
        }
      }
      return Promise.resolve(response); //进行中
    } else {
      return Promise.reject(response); //失败
    }
  },
  // 服务器状态码不是200的情况
  async (error) => {
    if (error.response.status) {
      if (error.response.status >= 400 && error.response.status <= 499) {
        el_message(
          `抱歉,您的请求无法完成!请检查您的输入是否正确,或者尝试稍后再次访问,如果问题持续存在,请联系我们的支持团队!`,
          "error"
        );
      } else if (error.response.status >= 500 && error.response.status <= 599) {
        el_message(
          `抱歉,服务器打瞌睡了,您的请求无法完成!请您尝试稍后再次访问,如果问题持续存在,请联系我们的支持团队!`,
          "error"
        );
      }
      return Promise.reject(error);
    }
  }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export const get = (url, params) => {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params,
      })
      .then((res) => {
        resolve(res.data);
      })
      .catch((err) => {
        reject(err.data);
      });
  });
};
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export const post = (url, params, is_form_data = false) => {
  if (is_form_data) {
    return new Promise((resolve, reject) => {
      axios
        .post(url, params, {
          headers: {
            "Content-Type":
              "multipart/form-data; boundary=---011000010111000001101001",
          },
        })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err.data);
        });
    });
  } else {
    return new Promise((resolve, reject) => {
      axios
        .post(url, JSON.stringify(params), {
          headers: {
            "Content-Type": "application/json; charset=utf-8",
          },
        })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err.data);
        });
    });
  }
};
